package com.tbit.uqbike.webmanager.dao.core;

import com.tbit.uqbike.object.pojo.*;
import com.tbit.uqbike.object.pojo.statistics.VipCardOrderDaySta;
import com.tbit.uqbike.object.value.UserRcDetail;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: chen
 * @Description: 会员卡
 * @Date: 创建于 11:19 2020/7/6
 */
public interface VipCardDao {
    /**
     * 分页
     */
    List<VipCard> queryPage(Map<String, Object> map);

    /**
     * 总数
     */
    Integer queryCount(Integer accountId);

    /**
     * 根据计费规则查询vip
     */
    Integer selectVipCardByFeeId(Map<String, Object> map);

    /**
     * 添加
     */
    void add(VipCard vipCard);

    /**
     * 修改
     */
    void update(VipCard vipCard);

    /**
     * 删除
     */
    void del(VipCard vipCard);

    /**
     * 置为失效
     */
    void edit(Integer vipId);

    /**
     * 用户购买记录
     */
    List<UserMember> userVipPage(Map<String, Object> map);

    /**
     * 总数
     */
    Integer userVipCount(Map<String, Object> map);

    /**
     * 按天分组统计会员卡
     */
    List<StatPark> groupByDay(Map<String, Object> map);

    /**
     * 购买会员卡套餐记录
     */
    List<UserRcDetail> page(Map<String, Object> map);

    /**
     * 购买会员卡套餐记录总数
     */
    Integer count(Map<String, Object> map);

    /**
     * 导出
     */
    List<UserRcDetail> export(Map<String, Object> map);

    /**
     * 统计总额与订单量
     */
    List<MoneyData> groupByAccountId(Map<String, Object> map);

    List<Map<String, Object>> selectVipCountByType(HashMap<String, Object> params);

    /**
     * 统计骑行卡总数
     */
    MoneyData getTotalMoney(Map<String, Object> params);

    /**
     * 统计前一天的骑行总数
     */
    Map<String, Object> statYesterdayVipCard(Map<String, Object> params);

    List<Map<String, Object>> statByDay(Map<String, Object> params);

    /**
     * stat vip日志
     *
     * @param params 参数个数
     * @return {@link VipCardOrderDaySta}
     */
    VipCardOrderDaySta statVipLogByDay(Map<String, Object> params);

    List<Map<String, Object>> statByDayLog(Map<String, Object> params);

    int updateValid(String orderNO);

    Integer selectAccountIdByOrderNO(String orderNO);

    VipCardLog findVipCardLogByOrderNoAndUserId(@Param("orderNo") String orderNo, @Param("userId") Integer userId);

    void updateVipCardLog(VipCardLog vipCard);

    /**
     * 根据区域id获取会员卡
     *
     * @param accountId 区域id
     * @return List<VipCard>
     */
    List<VipCard> selectByAccountId(@Param("accountId") Integer accountId);

    /**
     * 批量新增会员卡
     *
     * @param vipCards 会员卡集合
     */
    void batchAdd(@Param("vipCards") List<VipCard> vipCards);

    /**
     * 根据用户id和区域id集合获取最近会员卡购买记录
     *
     * @param userId        用户id
     * @param accountIdList 区域id集合
     */
    UserMember userVipPageByAccountIdList(@Param("userId") Integer userId, @Param("accountIdList") List<Integer> accountIdList);

    /**
     * 根据用户id获取生效的会员卡信息
     * @param userId 用户id
     * @param accountId 区域id
     * @return vipCard
     */
    VipCard getEfficientVipCard(@Param("userId") Integer userId, @Param("accountId") Integer accountId);

    /**
     * 根据会员卡id获取会员卡信息
     * @param vipId 会员卡id
     * @return  vip
     */
    VipCard selectByVipId(@Param("vipId") Integer vipId);
}
